package pl.uz.zgora.plan;

import java.util.ArrayList;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;

public class PrzedmiotDataSource {
	private SQLiteDatabase database;
	
	public PrzedmiotDataSource(SQLiteDatabase database)
	{
		this.database = database;
	}
	
	public boolean addPrzedmiot(final Przedmiot przedmiot)
	{
		if(!database.isOpen())
			throw new SQLiteException("Database not open!");
		
		if(database.isReadOnly())
			throw new SQLiteException("Wrong database connection!");
		
		ContentValues values = new ContentValues();
		values.put(PlanDatabaseHandler.KEY_DAY, przedmiot.getDzien());
		values.put(PlanDatabaseHandler.KEY_NAME, przedmiot.getNazwa());
		values.put(PlanDatabaseHandler.KEY_SUBGROUP, przedmiot.getPodgrupa());
		values.put(PlanDatabaseHandler.KEY_TYPE, przedmiot.getRodzajZajec());
		values.put(PlanDatabaseHandler.KEY_START_TIME, przedmiot.getGodzinaRozpoczecia());
		values.put(PlanDatabaseHandler.KEY_END_TIME, przedmiot.getGodzinaZakonczenia());
		values.put(PlanDatabaseHandler.KEY_FK_SALA, przedmiot.getFkSali());
		values.put(PlanDatabaseHandler.KEY_FK_GRUPA, przedmiot.getFkGrupy());
		values.put(PlanDatabaseHandler.KEY_FK_NAUCZYCIEL, przedmiot.getFkNauczyciela());
		values.put(PlanDatabaseHandler.KEY_NOTES, przedmiot.getUwagi());
		
		if(database.insert(PlanDatabaseHandler.TABLE_PRZEDMIOT, null, values) == -1)
			return false;
		
		return true;
	}
	
	public boolean addPrzedmiotList(final ArrayList<Przedmiot> przedmioty)
	{
		if(przedmioty == null || przedmioty.isEmpty()) {
			return false;
		}
		
		for(Przedmiot przedmiot: przedmioty) {
			if(!addPrzedmiot(przedmiot)) {
				return false;
			}
		}
		
		return true;
	}
	
	public ArrayList<Przedmiot> getPrzedmioty()
	{
		if(!database.isOpen())
			throw new SQLiteException("Database not open!");
		
		ArrayList<Przedmiot> przedmioty = new ArrayList<Przedmiot>();
		Cursor cursor = null;
		
		cursor = database.query(PlanDatabaseHandler.TABLE_PRZEDMIOT,
				null, null, null, null, null, null);
	
		cursor.moveToFirst();
		while (!cursor.isAfterLast()) {
			final Przedmiot przedmiot = PrzedmiotDataSource.cursorToPrzedmiot(cursor);
			przedmioty.add(przedmiot);
			cursor.moveToNext();
		}
		// Make sure to close the cursor
		cursor.close();
		
		return przedmioty;
	}
	
	public ArrayList<Przedmiot> getPrzedmioty(final String dzien)
	{
		if(!database.isOpen())
			throw new SQLiteException("Database not open!");
		
		ArrayList<Przedmiot> przedmioty = new ArrayList<Przedmiot>();
		Cursor cursor = null;
		
		cursor = database.query(PlanDatabaseHandler.TABLE_PRZEDMIOT,
			null, "dzien = '" + dzien + "'", null, null, null, null);
		cursor.getColumnNames();

		cursor.moveToFirst();
		while (!cursor.isAfterLast()) {
			final Przedmiot przedmiot = PrzedmiotDataSource.cursorToPrzedmiot(cursor);
			przedmioty.add(przedmiot);
			cursor.moveToNext();
		}
		// 	Make sure to close the cursor
		cursor.close();
		
		return przedmioty;
	}
	
	public static Przedmiot cursorToPrzedmiot(Cursor cursor)
	{
		Przedmiot przedmiot = new Przedmiot();
		przedmiot.setIdPrzedmiotu(cursor.getInt(0));
		przedmiot.setDzien(cursor.getString(1));
		przedmiot.setNazwa(cursor.getString(2));
		przedmiot.setPodgrupa(cursor.getString(3));
		przedmiot.setRodzajZajec(cursor.getString(4));
		przedmiot.setGodzinaRozpoczecia(cursor.getString(5));
		przedmiot.setGodzinaZakonczenia(cursor.getString(6));
		przedmiot.setFkSali(cursor.getInt(7));
		przedmiot.setFkGrupy(cursor.getInt(8));
		przedmiot.setFkNauczyciela(cursor.getInt(9));
		przedmiot.setUwagi(cursor.getString(10));
		return przedmiot;
	}
}
